昨天我們介紹了基本型別,今天要進一步學會 Union Type(聯合型別) 和 Enum(列舉)。
這次一樣用「搭火車」的例子 🚄,讓程式碼更貼近生活!
Union 的特色是用 |
將多種可能型別區分開來。
當一個值可能有「多種型別」時,Union 非常好用。
let ticketId: number | string;
ticketId = 12345; // 數字型票號
ticketId = "A12"; // 字串型票號
// ticketId = true; // ❌ 編譯錯誤
在使用 Union 時,我們通常需要用 typeof
來判斷型別後再操作,避免出錯。
function printTicketId(id: number | string) {
if (typeof id === "string") {
console.log("票號(字串):" + id.toUpperCase());
} else {
console.log("票號(數字):" + id);
}
}
printTicketId(12345);
printTicketId("b23");
type PaymentMethod = "Cash" | "CreditCard" | "MobilePay";
let payment: PaymentMethod;
payment = "Cash"; // ✅
payment = "MobilePay"; // ✅
// payment = "Coupon"; // ❌ 不在定義範圍
Enum 適合定義「固定範圍內的值」,比 Union 更有「名稱 → 值」的對應關係。
enum TicketStatus {
NotBought, // 尚未購買
Bought, // 已購票
Used, // 已使用
Expired // 已過期
}
let myTicket: { passenger: string; status: TicketStatus } = {
passenger: "Arvin",
status: TicketStatus.Bought,
};
console.log(myTicket);
let passengers: { name: string; status: TicketStatus }[] = [];
function addPassenger(name: string) {
passengers.push({
name: name,
status: TicketStatus.NotBought,
});
}
addPassenger("Alice");
addPassenger("Bob");
console.log(passengers);
enum TrainClass {
Express = "自強號",
Local = "區間車",
HighSpeed = "高鐵"
}
function printTrainClass(c: TrainClass) {
console.log("列車種類:" + c);
}
printTrainClass(TrainClass.Express);
👉 明天(Day 5)我們會介紹 interface 和 type,讓我們的火車旅程更結構化! 🚉